Perfect Blu - SECCON 2023
配布ファイルをVLCで再生すると、メニュー画面を使ったflag checkerが表示された。配布ファイルを展開してBDMV/STREAM内の.m2tsファイルを確認すると、flagをn文字入力したときの画面、flagが正しかったときの画面、flagが誤っていたときの画面がそれぞれ置かれていた。
code:json
{
"def_button": 10,
"buttons": [
{
"id": 10,
"v": 10,
"f": 0,
"auto_action": false,
"x": 315,
"y": 543,
"navigation": {
"up": 0,
"down": 20,
"left": 10,
"right": 11
},
"states": {
"normal": {
"start": 30,
"stop": 30,
"flags": 255
},
"selected": {
"start": 31,
"stop": 31,
"flags": 255
},
"activated": {
"start": 32,
"stop": 32
}
},
"commands": [
[
0,
0,
0
],
[
1346371597,
4053,
29
],
[
562167808,
81,
0
],
[
0,
0,
0
]
]
}
]
},
正しいと思われるボタンは他のボタンと比較してcommandsの内容が異なっていたため、そのようなボタンの位置情報から文字を復元することでflagが得られた。
code:python
import json
key = '1234567890qwertyuiopasdfghjkl{zxcvbnm_-}'.upper()
for i in range(97):
obj = json.load(open('%05d.json' % i))
print()